package com.chorye.function.schedule.util;

import com.chorye.function.schedule.common.QuartzConst;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.SchedulerRepository;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 定时任务工具类
 *
 * @author Chorye
 */
public class JobUtil {

    /**
     * 日志工具
     */
    private static final Logger log = LoggerFactory.getLogger(JobUtil.class);
    /**
     * 日期格式
     */
    private final static String DATE_PATTERN_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * 配置文件配置的 定时任务实例名称
     */
    private final static String QUARTZ_INSTANCE_NAME = "DefaultQuartzScheduler";
    /**
     * 初始化定时任务调度器
     */
    private static Scheduler scheduler = null;

    /**
     * 私有构造器，禁止创建实例
     */
    private JobUtil() {
        throw new IllegalStateException("Utility class");
    }

    /**
     * 获取定时任务调度器
     *
     * @return 定时任务调度器
     * @throws SchedulerException 定时任务异常
     */
    public static Scheduler getScheduler() throws SchedulerException {
        // 如果调度器不存在
        if (scheduler == null) {
            // 获取配置文件配置的的调度器
            scheduler = SchedulerRepository.getInstance().lookup(QUARTZ_INSTANCE_NAME);
            // 获取不到
            if (scheduler == null) {
                // 获取默认的调度器
                scheduler = StdSchedulerFactory.getDefaultScheduler();
            }
        }
        return scheduler;
    }

    /**
     * 将1435373580000类型时间转为yyyy-MM-dd HH:mm:ss格式
     *
     * @param times 1435373580000类型的时间
     * @return yyyy-MM-dd HH:mm:ss格式日期
     */
    public static String fmtLongTimeToString(String times) {
        // 创建格式化工具
        SimpleDateFormat sf = new SimpleDateFormat(DATE_PATTERN_FORMAT);
        // 如果时间传进来的不存在或者为0
        if (times == null || QuartzConst.ZERO_CHAR.equals(times)) {
            // 设置一个默认的时间
            times = "1344578812000";
        }
        Date date = new Date();
        date.setTime(Long.valueOf(times));
        // 转化
        return sf.format(date);
    }

    /**
     * yyyy-MM-dd HH:mm:ss格式日期字符串转化为Date对象
     *
     * @param time yyyy-MM-dd HH:mm:ss格式
     * @return Date对象
     */
    public static Date paraseToDate(String time) {
        // 创建格式化工具
        SimpleDateFormat sf = new SimpleDateFormat(DATE_PATTERN_FORMAT);
        // 如果时间不存在则返回空
        if (StringUtils.isEmpty(time)) {
            return null;
        }
        try {
            // 转化
            return sf.parse(time);
        } catch (ParseException e) {
            // 转化失败
            if (log.isErrorEnabled()) {
                log.error(e.toString());
            }
            return null;
        }
    }
}
